导航菜单
首页 >  Spark相关知识点期末复习集锦  > Spark知识点复习

Spark知识点复习

1. 翻译

Apache Spark是一个快速的、通用的集群计算系统。它提供Java、Scala、Python和R中的高级api,以及一个支持通用执行图的优化引擎。它还支持一组丰富的高级工具,包括用于SQL和结构化数据处理的[Spark SQL]、用于机器学习的[MLlib]、用于图形处理的[GraphX]和用于流媒体的[Spark streams]。

#####2.什么是spark?

> Spark是一种基于内存的快速、通用、可扩展的大数据分析引擎。

##### 3.spark生态:

> + spark core: spark 的核心计算> + spark sql (结构化数据):对历史数据做交互式查询(即席查询:用户根据自己的需求 自定义查询)> + spark Streaming : 近实时计算> + spark mlib :机器学习> + spark graphX:图计算(关注事物本身而且关注事物之间的联系)

##### 4. 什么是结构化和非结构化?

结构化数据——能够用数据或统一的结构加以表示,如数字、文字、符号。结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。半结构化数据——是介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全无结构的数据(如声音、图像文件等)之间的数据,XML、HTML文档就属于半结构化数据。它一般是自描述的,数据的结构和内容混在一起,没有明显的区分。非结构化数据——非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。包括图像和音频/视频信息等等。丢失的视频数据就属于非结构化数据。

#####5.实时计算框架Storm sparkString flink 区别?

> Storm ,flink 实时处理性好 一条一条处理> sparkString 可以批处理 非实时> flink 批处理 flink SQL

##### 6.spark 的资源调度? standalone yarn mesos

> local模式:利用多线程对程序进行单机调试;分布式部署模式:> (1)、standalone:独立模式,类似于MapReduce1;> (2)、spark on yarn:利用yarn进行统一的资源调度和管理;> (3)、spark on mesos:类似于yarn进行资源调度,支持粗粒度和细粒度的调度,前者节约资源调度时间,后者减少资源的浪费;

##### 7.什么是Rdd?

> 弹性分布式数据集> 这三个特性分别为:分区,不可变,并行操作。

#####8.spark on hive 和 hive on spark?

> + spark on hive:hive 作为数据源,spark计算> + hive on spark:spark 作为hive 底层的计算引擎

##### 9.spark 为什么比hadoop 的mr快?

> 1. 基于内存> 2. spark实现了DAG引擎> 3. spark的容错

1.消除了冗余的HDFS读写Hadoop每次shuffle操作后,必须写到磁盘,而Spark在shuffle后不一定落盘,可以cache到内存中,以便迭代时使用。如果操作复杂,很多的shufle操作,那么Hadoop的读写IO时间会大大增加。2.消除了冗余的MapReduce阶段Hadoop的shuffle操作一定连着完整的MapReduce操作,冗余繁琐。而Spark基于RDD提供了丰富的算子操作,且reduce操作产生shuffle数据,可以缓存在内存中。3.JVM的优化Spark Task的启动时间快。Spark采用fork线程的方式,Spark每次MapReduce操作是基于线程的,只在启动。而Hadoop采用创建新的进程的方式,启动一个Task便会启动一次JVM。

Spark的Executor是启动一次JVM,内存的Task操作是在线程池内线程复用的。

##### 10.什么是DAG? 有向无环图

##### 11.spark 的特点?

1)快:与 Hadoop的 Mapreduce/相比, Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10上。Spak实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。计算的中间结果是存在于内存中2)易用:spaは支持ava、 Python和a的AP,还支持超过so种高级算法,使用户可以快速构建不同的应用。而且Spak支持交互式的 Python和 Scala的 Shell,,可以非常方便地在这些Shel中使用 Spark集群来验证解决问题的方法。3)通用: Spark提供了统一的解决方案。 Spark可以用于批处理、交互式查询( Spark SQL)、实时流处理( Spark Streaming)、机器学习( Spark Mllib)和图计算( Graphx)。这些不同类型的处理都可以在同一个应用中无缝使用。减少了开发和维护的人力成本和部署平台的物力成本4)兼容性: Spark可以非常方便地与其他的开源产品进行融合。比如, Spark可以使用 Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,并且可以处理所有 Hadoop支持的数据,包括HDFS、 Hbase等。这对于已经部署 Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spak的强大处理能力。

##### 12.spark 能代替hadoop 吗?

不能,仅仅是mr的替代方案

##### 13.spark Rdd 的缓存?

cache / persist 内存中缓存 ,内部的优化机制。当Rdd 重复被使用了,不需要在重新计算,直接从内存中获取使用

1、提高性能 (默认将数据缓存在内存中)​2.缓存使用的函数cache,Persist,标识RDD可以被缓存​cache函数底层调用Persist​storage level:标识缓存的位置​MEMORY_ONLY 存在内存中的​MEMORY_ONLY_2 存在内存中的​MEMORY_ONLY_SER 存在内存中,以序列化形式存储​DISK_ONLY 存储在磁盘中

##### 14.driver 的作用?

Spark 的驱动器是执行开发程序中的 main 方法的进程。它负责开发人员编写的用来创 建 SparkContext、创建 RDD,以及进行 RDD 的转化操作和行动操作代码的执行。启动 Spark shell 的时候,系统后台自启了一个 Spark 驱动器程序, 就是在 Spark shell 中预加载的一个叫作 sc 的 SparkContext 对象。如果驱动器程序终止,那 么 Spark 应用也就结束了。主要负责:1)把用户程序转为作业(JOB)2)跟踪 Executor 的运行状况3)为执行器节点调度任务4)UI 展示应用运行状况

##### 15.excutor 的作用?

Spark Executor 是一个工作进程,负责在 Spark 作业中运行任务,任务间相互独立。Spark 应用启动时,Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存 在。如果有 Executor 节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上 的任务调度到其他 Executor 节点上继续运行。主要负责:1)负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程;2)通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存式 存储。RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

##### 16.spark spark-submit脚本的参数有哪些?

参数名 参数说明--master master 的地址,提交任务到哪里执行,例如 spark://host:port, yarn, local--deploy-mode 在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client--class 应用程序的主类,仅针对 java 或 scala 应用--name 应用程序的名称--jars 用逗号分隔的本地 jar 包,设置后,这些 jar 将包含在 driver 和 executor 的 classpath 下--packages 包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标--exclude-packages 为了避免冲突 而指定不包含的 package--repositories 远程 repository--conf PROP=VALUE指定 spark 配置属性的值,例如 -conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m"--properties-file 加载的配置文件,默认为 conf/spark-defaults.conf--driver-memory Driver内存,默认 1G--driver-java-options 传给 driver 的额外的 Java 选项--driver-library-path 传给 driver 的额外的库路径--driver-class-path 传给 driver 的额外的类路径--driver-cores Driver 的核数,默认是1。在 yarn 或者 standalone 下使用--executor-memory 每个 executor 的内存,默认是1G--total-executor-cores 所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用--num-executors 启动的 executor 数量。默认为2。在 yarn 下使用--executor-core 每个 executor 的核数。在yarn或者standalone下使用

##### 17.spark 配置的方式?

> 代码 脚本 配置文件 , 优先级一次降低的

##### 18.spark的资源调度方式?

> local模式> standalone> on-yarn : yarn-cluster yarn-client> mesos (粗细粒度)

##### 19.spark 的提交方式有两种?

> 发布模式: client cluster

##### 20.spark collect 算子的作用?

> 收集一个弹性分布式数据集的所有元素到一个数组中,从远程集群拉取数据到driver端。

##### 21.oom?

> OOM - Out of Memory,内存溢出

##### 22.spark yarn 的提交方式有:

> --master yarn-client :资源调度yarn 提交方式 client> --master yarn-cluster :资源调度yarn 提交方式 cluster

cluster 模式会在集群的某个节点上为 Spark 程序启动一个称为 Master 的进程,然后 Driver 程序会运行正在这个 Master 进程内部,由这种进程来启动 Driver 程序,客户端完成提交的步骤后就可以退出,不需要等待 Spark 程序运行结束,这是四一职中适合生产环境的运行方式client 模式也有一个 Master 进程,但是 Driver 程序不会运行在这个 Master 进程内部,而是运行在本地,只是通过 Master 来申请资源,直到运行结束,这种模式非常适合需要交互的计算。显然 Driver 在 client 模式下会对本地资源造成一定的压力。

##### 23.spark client 和 cluster 提交方式的区别?

> 主要区别在于:Driver程序的运行节点> + client:driver 在你当前提交的节点运行,driver 需要频繁的和集群通信占用大量的网络带宽,容易挂掉,好处是方便查看日志便于调试,多用于学习和测试> + cluster :driver 在集群的节点。挂掉会自动重启

##### 24.Rdd的属性?

> 1. RDD是一个分片的数据集合;> 2. RDD的函数针对每个分片进行计算,并行计算> 3. rdd之间的依赖关系(宽窄依赖)> 4. key-value型RDD是根据哈希来分区的

##### 25.Rdd的并行度?

> 一个Rdd 可以有多个分片,一个分片对应一个task,分片的个数决定并行度> 并行度并不是越高越好, 还要考虑资源的情况> 当并行度过低时,Spark集群会出现资源闲置的情况。> 当并行度过高时,每个分区产生的间接开销累计起来会更大。

##### 26.spark的算子有两种?

> 转换算子:transformation 由一个Rdd 生成一个新的Rdd 不会被立即执行,记录的都是一系列的操作>> 动作算子:action 立即执行,返回都是结果

##### 27.spark的容错?

> lineage:血缘关系,根据血缘关系从新计算 进行容错> checkpoint:设置检查点,一般都是文件系统,磁盘io

##### 28.spark的持久化?

> cache 、persist、checkpoint> cache持久化:> ​cache实际上是persist的一种简化方式,是一种懒执行的,执行action类算子才会触发,cahce后返回值要赋值给一个变量,下一个job直接基于变量进行操作。> checkpoint:会将RDD的数据存储到HDFS中,安全系数较高,因为HDFS会有备份

##### 29.什么是宽依赖,窄依赖?

> 窄依赖:父RDD与子RDD,partition之前的关系是一对一(或者多对一)的;> 宽依赖:父RDD与子RDD,partition之前的关系是一对多的;> 作用:切割job,划分stage;Application,一个算子或者多个算子拆分(宽依赖和窄依赖)> - l 是碰到一个宽依赖,就会切割一个stage> - l rdd里面存储的不是数据,而一个代码逻辑> - l 数据只有在stage与stage之间的时候将数据落地,到底数据写到哪个小文件(Reduce输出)中,是由分区器决定的.> - l stage里面的并行度是由最后一个rdd来决定的.

##### 31.创建Rdd的方式有几种?

> 1. 使用程序中的集合创建RDD val arr = Array() sc.parallelize(arr) sc.makeRDD(arr )> 2. 使用本地文件创建RDD> 3. 使用HDFS文件创建RDD

##### 32.map和mapPartitons有什么区别?

> map是对rdd中的每一个元素进行操作> mapPartitions则是对rdd中的每个分区的迭代器进行操作

##### 30.总结Rdd 的算子(30个以上)

算子类型说明++合并两个RDDaggregate执行算子根据初始化值进行对rdd种的元素进行聚合,结束之后每个分区会有一个结果,后面会根据这个分区结果再进行一次聚合aggregateByKey执行算子和aggregate类似,但是操作的是RDD是Pair类型cache()控制操作当第一次遇到Action算子时才会触发持久化操作。Cache()是persis的一种特殊情况,将RDD持久化到内存中转换算子Cartesian转换算子计算两个RDD之间的笛卡尔乘积,并将它们作为新的RDD返回coalesce转换算子将RDD进行重分区,使用HashPartitioner。它的简版是repartition算子Cogroup转换算子相当于SQL中的全外关联full outer join,返回左右RDD中的记录,关联不上的为空。Collect执行算子一个RDD转换成数组。根据一个偏函数返回一个符合偏函数的结果集RDD。即将RDD转换成数组collectAsMap一个RDD转换成MapcombineByKey转换算子将RDD[K,V]转换成RDD[K,C],这里的V类型和C类型可以相同也可以不同。(单个值类型v操作 , 同分区内合并操作 , 多分区间的合并操作 )Count执行算子返回RDD中的元素数量countByKey执行算子统计RDD[K,V]中每个K的数量。createCombiner参数组合器函数,用于将V类型转换成C类型,输入参数未RDD[K,V]中的V,输出为Cdistinct转换算子去除RDD重复的元素,返回所有元素不重复的RDDflatMap转换算子类似于map。1对多,可以理解成将原来的数据集拍扁了。RDD中每个元素可生成一个或多个元素构成的新RDD例如将数组、列表拆分成单个值或字符串拆分成单个字符flatMapValues转换算子类似于flatMap,只不过flatMapValues是针对[K,V]中的V值进行flatMap操作。filter转换算子过滤,根据里面的规则返回(true的)一个过滤过后的rddFirst执行算子返回RDD中的第一个元素,不排序。Fold执行算子是aggregate的简化版,将aggregate中的seqOp和combOp使用同一个函数op。foldByKey转换算子作用于RDD[K,V],根据K将V做折叠、合并处理。foreach执行算子遍历RDD,将函数f应用于每一个元素。需要注意如果RDD执行foreach,只会在Executor端有效,并且不是Driver端foreachPartition执行算子与foreach类似,只不过是对每一个分区使用ffullOuterJoin转换算子类似于SQL的全连接,glom转换算子将RDD中每一个分区中所有类型为T的元素转换成Array[T]groupBy根据业务需求,按照自定义的返回值来分区groupByKey转换算子根据key将value进行分组。该函数用于将RDD[K,V]中每个K对应的V值,合并到一个集合Iterable[V]中intersection转换算子取交集。返回两个RDD中相同的数据集合,返回元素去重。类似于SQL中的inner joinjoin转换算子类似于SQL中的内关联join,只返回两个RDD根据K可以关联上的结果leftOuterJoin转换算子类似于SQL中的左外关联left outer join,返回结果以前面的RDD为主,关联不上的记录为空Lookup执行算子用于(K,V)类型的RDD,指定K值,返回RDD中该K对应的所有V值。map转换算子对RDD中的每一个元素经过func函数转换后形成一个新的RDDmapPartitions转换算子是map的一个变种。mapPartitions的输入函数是应用于每个分区,也就是把每个分区中的内容作为整体来处理的。在映射过程中频繁创建额外的对象时mapPartitions比map高效,例如在RDD中创建数据库的连接等。mapPartitionsWithIndex转换算子函数作用同mapPartitions,不过提供了两个参数,第一个参数为分区的索引。mapValues转换算子类似于map算子,只不过此算子针对[K,V]值中的V值进行map。进行输入函数应用于RDD中Kev-Value的Value,原RDD中的Key保持不变与新的Value一起组成新的RDD中的元素。如(panda,0)转成(panda,(0,1))mergeValue参数合并值函数,将一个C类型和V类型值合并成一个C类型,输入参数为(C,V),输出为CmergeCombiners参数合并组合器函数,用于将两个C类型值合并成一个C类型,输入参数为(C,C),输出为CnumPartition参数结果RDD分区数,默认保持原有分区数partitionBy转换算子该函数根据partitioner函数生成新的ShuffleRDD,将原RDD重新分区。persist()控制操作persis(level:StorageLevel)可以传入缓存级别,默认是MEMORY_ONLY,此时同cache()操作转换算子randomSplit转换算子该函数根据weights权重,将一个RDD切分成多个RDD。Reduce执行算子将RDD中元素两两传递给输入函数,同时产生一个新的值。根据映射函数,对RDD中的元素进行二元计算reduceByKey转换算子对元素为RDD[K,V]对的RDD中Key相同的元素的Value进行reducereduceByKeyLocally转换算子和reduceByKey类似。RDD[K,V]中每个K对应的V值根据映射函数来运算,运算结果映射到一个Map[K,V]中,而不是RDD[K,V]。repartition转换算子该函数其实就是coalesce函数第二个参数为true的实现rightOuterJoin转换算子类似于SQL中的右外关联right outer join,返回结果以参数中的RDD为主,关联不上的记录为空saveAsHadoopFile存储操作将RDD存储在HDFS上的文件中,支持老版本Hadoop API。可以指定outputKeyClass、outputValueClass以及压缩格式执行算子saveAsHadoopDataset存储操作可以用于将RDD保存到除了HDFS的其他存储中,比如HBase。在JobConf中通常需要关注或设置5个参数:文件保存路径、Key值的class类型、value值的class类型、RDD的输出格式(OutputFormat)以及压缩相关的参数执行算子saveAsNewAPIHadoopFile存储操作用于将RDD数据保存到HDFS上,使用新版本的Hadoop API,用法基本同saveAsHadoopFile执行算子saveAsNewAPIHadoopDataset存储操作该方法作用同saveAsHadoopDataset,只不过采用新版本的Hadoop API执行算子saveAsObjectFile存储操作将RDD中的元素序列化成对象,存储到文件中。对于HDFS,默认采用SequenceFile保存执行算子saveAsSequenceFile存储操作将RDD以SequenceFile的文件格式保存到HDFS上。执行算子saveAsTextFile存储操作将RDD以文

相关推荐: